package com.personal.common.util;

import java.util.Stack;

public class ScaleConvert {
	private static char[] charSet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
			.toCharArray();

	/**
	 * 将10进制转化为62进制
	 * 
	 * @param number
	 * @param length
	 *            转化成的62进制长度，不足length长度的话高位补0，否则不改变什么
	 * @return
	 */
	public static String convert_10_to_62(long number, int length) {
		Long rest = number;
		Stack<Character> stack = new Stack<Character>();
		StringBuilder result = new StringBuilder(0);
		while (rest != 0) {
			stack.add(charSet[new Long((rest - (rest / 62) * 62)).intValue()]);
			rest = rest / 62;
		}
		for (; !stack.isEmpty();) {
			result.append(stack.pop());
		}
		long result_length = result.length();
		StringBuilder temp0 = new StringBuilder();
		for (long i = 0; i < length - result_length; i++) {
			temp0.append('0');
		}

		return temp0.toString() + result.toString();

	}

	/**
	 * 将62进制转换成10进制数
	 * 
	 * @param ident62
	 * @return
	 */
	public static String convert_62_to_10(String ident62) {
		long decimal = 0;
		long base = 62;
		long keisu = 0;
		long cnt = 0;

		byte ident[] = ident62.getBytes();
		for (int i = ident.length - 1; i >= 0; i--) {
			int num = 0;
			if (ident[i] > 48 && ident[i] <= 57) {
				num = ident[i] - 48;
			} else if (ident[i] >= 65 && ident[i] <= 90) {
				num = ident[i] - 65 + 10;
			} else if (ident[i] >= 97 && ident[i] <= 122) {
				num = ident[i] - 97 + 10 + 26;
			}
			keisu = (int) java.lang.Math.pow((double) base, (double) cnt);
			decimal += num * keisu;
			cnt++;
		}
		// return String.format( "%08d", decimal );
		return decimal + "";
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// System.out.println("62System="
		// +convert_10_to_62(Integer.parseInt("35174605"), 5));

		// String d = EncryptDecryptBarcode.decryptL6("qCngo9");
		// // d="123456789000000";
		// System.out.println(d);
		// System.out.println("10System=" +convert_62_to_10(d));

		System.out.println(convert_62_to_10("2bH"));
//		System.out.println(convert_10_to_62(56800235583L, 6));
//		System.out.println(convert_10_to_62(1l, 3));

		// String str = convert_62_to_10("00t");
		// System.out.println(str);
		// int ii = Integer.parseInt(str);
		// String str2 = convert_10_to_62(ii, 3);
		// System.out.println(str2);
		//
		// int i = Integer.parseInt(convert_10_to_62(ii,7));

		// System.out.println(convert_10_to_62(26, 3));
		// System.out.println(convert_10_to_62(27, 3));

		// List<Long> list = new ArrayList<>();
		// list.add(3L);
		// list.add(22L);
		// list.add(23L);
		// list.add(26L);
		// list.add(27L);
		// list.add(28L);
		// list.add(29L);
		// list.add(31L);
		// list.add(32L);
		// list.add(33L);
		//
		// for(Long l : list){
		// String s = convert_10_to_62(l, 3);
		// System.out.println(l+"的62进制="+s);
		// }

		// Date d1 = new Date();
		// for(int i=0;i<2099999999;i++){
		// String str = i+"";
		// String s62System = convert_10_to_62(Integer.parseInt(str), 8);
		// String s10System = convert_62_to_10(s62System);
		//
		// // System.out.println(s62System+","+s10System);
		//
		// int ii = Integer.parseInt(s10System);
		// if(ii != i){
		// System.out.println("出现错误:"+i+","+s62System+","+s10System);
		// break;
		// }
		// if(i%1000000==0){
		// System.out.println(i);
		// }
		// }
		// Date d2 = new Date();
		//
		// System.out.println(d2.getTime() - d1.getTime());
	}
}
